// pages/main/global-search/global-search.js
Page({
  data: {
    searchKeyword: '',
    businessApps: [],
    administrativeApps: [],
    operationsApps: [],
    configurationApps: [],
    visualizationApps: [],
    currentCategory: 'all', // 当前选中的分类
    loading: false,
    hasSearched: false, // 是否已执行过搜索
    recentSearches: [], // 最近搜索记录
    totalCount: 0,
    loadmoreShow: false,
    loadmoreType: 'loading',
    hasMore: true
  },

  onLoad(options) {
    // 加载最近搜索记录
    this.loadRecentSearches();
    
    // 从页面参数获取搜索关键词，使用 decodeURIComponent 解码中文
    let keyword = '';
    if (options.keyword) {
      try {
        keyword = decodeURIComponent(options.keyword);
      } catch (e) {
        // 如果解码失败，使用原始值
        keyword = options.keyword;
      }
    }
    this.setData({
      searchKeyword: keyword
    });
    
    // 如果从上一个页面跳转过来时带有搜索内容，视为已经点击过正式搜索了，自动执行搜索
    if (keyword) {
      this.performSearch(keyword);
    }
  },

  // Lin UI 搜索框 - 输入时触发（只更新关键词，不执行搜索）
  onSearchChange(e) {
    const keyword = (e.detail.value || '').trim();
    this.setData({ searchKeyword: keyword });
    // 如果清空了搜索关键词，清除搜索结果并显示最近搜索
    if (!keyword) {
      this.clearResults();
      this.loadRecentSearches();
    }
  },

  // Lin UI 搜索框 - 确认搜索时触发（只更新关键词，不执行搜索）
  onSearchConfirm(e) {
    const keyword = (e.detail.value || '').trim();
    this.setData({ searchKeyword: keyword });
    // 不执行搜索，等待用户点击搜索按钮
  },

  // Lin UI 搜索框 - 清除搜索时触发
  onSearchClear() {
    this.setData({ 
      searchKeyword: ''
    });
    this.clearResults();
    // 重新加载最近搜索记录
    this.loadRecentSearches();
  },

  // Lin UI 搜索框 - 点击搜索按钮时触发（在当前页面重新搜索）
  onSearchButtonTap() {
    const keyword = this.data.searchKeyword || '';
    if (keyword) {
      this.performSearch(keyword);
    } else {
      this.clearResults();
    }
  },

  // 执行搜索
  performSearch(keyword) {
    if (!keyword) {
      this.clearResults();
      return;
    }

    // 保存搜索记录
    this.saveSearchKeyword(keyword);

    this.setData({ 
      loading: true,
      hasSearched: true
    });

    const username = wx.getStorageSync('username');
    if (!username) {
      wx.showToast({
        title: '请先登录',
        icon: 'none'
      });
      this.setData({ loading: false });
      return;
    }

    wx.request({
      url: `${getApp().globalData.serverUrl}/GlobalSearch/`,
      method: 'POST',
      data: {
        keyword: keyword,
        category: 'all',
        username: username
      },
      success: (res) => {
        if (res.data.status) {
          // 处理项目数据，提取合同编号、项目编号等信息
          const processProjects = (projects) => {
            return projects.map(project => {
              // 提取合同编号
              let contractNumber = '';
              let projectNumber = '';
              const tabsData = project.tabsData || [];
              
              for (const tab of tabsData) {
                // 从合同信息中提取合同编号
                if (tab.key === 'contract' || tab.tab === '合同') {
                  const fields = tab.fields || [];
                  for (const field of fields) {
                    if (field.label === '合同编号' || field.key === 'contractNumber') {
                      contractNumber = field.value || '';
                      break;
                    }
                  }
                }
                
                // 从关联项目中提取项目编号
                if (tab.key === 'related_projects' || tab.tab === '关联项目') {
                  const tableData = tab.tableData || [];
                  if (tableData.length > 0) {
                    projectNumber = tableData[0].projectNumber || '';
                  }
                }
              }
              
              return {
                ...project,
                contractNumber: contractNumber,
                projectNumber: projectNumber || project.id
              };
            });
          };
          
          const business = processProjects(res.data.business || []);
          const administrative = processProjects(res.data.administrative || []);
          const operations = processProjects(res.data.operations || []);
          const configuration = processProjects(res.data.configuration || []);
          const visualization = processProjects(res.data.visualization || []);
          const total = business.length + administrative.length + operations.length + configuration.length + visualization.length;
          this.setData({
            businessApps: business,
            administrativeApps: administrative,
            operationsApps: operations,
            configurationApps: configuration,
            visualizationApps: visualization,
            totalCount: total,
            loading: false,
            hasMore: true,
            loadmoreShow: false,
            loadmoreType: 'loading'
          });
        } else {
          wx.showToast({
            title: res.data.message || '搜索失败',
            icon: 'none'
          });
          this.setData({ loading: false });
        }
      },
      fail: (err) => {
        console.error('搜索失败:', err);
        wx.showToast({
          title: '网络错误',
          icon: 'none'
        });
        this.setData({ loading: false });
      }
    });
  },

  // 清除搜索结果
  clearResults() {
    this.setData({
      businessApps: [],
      administrativeApps: [],
      operationsApps: [],
      configurationApps: [],
      visualizationApps: [],
      hasSearched: false,
      loading: false
    });
  },

  // Segment 切换
  onSegmentChange(e) {
    const category = e.detail.activeKey;
    this.setData({ currentCategory: category });
  },

  onReachBottom(){
    if(!this.data.hasSearched || !this.data.searchKeyword){ return }
    if(this.data.hasMore){
      this.setData({ loadmoreShow:true, loadmoreType:'loading' })
      setTimeout(()=>{
        // 模拟一次加载，若无更多数据则提示结束
        this.setData({ hasMore:false, loadmoreType:'end' })
      },800)
    }else{
      this.setData({ loadmoreShow:true, loadmoreType:'end' })
    }
  },

  // 已移除滚动居中逻辑，使用 l-segment 等宽标签

  // 点击项目
  onProjectTap(e) {
    const project = e.currentTarget.dataset.project;
    console.log('点击项目:', project);
    
    // 跳转到项目详情页面
    let url = `/pages/main/app-detail/app-detail?id=${project.id}&context_id=${project.app_id || ''}`;
    
    wx.navigateTo({
      url: url
    });
  },

  // 加载最近搜索记录
  loadRecentSearches() {
    try {
      const recentSearches = wx.getStorageSync('global_search_recent') || [];
      this.setData({
        recentSearches: recentSearches
      });
    } catch (e) {
      console.error('加载最近搜索记录失败:', e);
      this.setData({
        recentSearches: []
      });
    }
  },

  // 保存搜索关键词到缓存
  saveSearchKeyword(keyword) {
    if (!keyword || !keyword.trim()) {
      return;
    }
    
    try {
      let recentSearches = wx.getStorageSync('global_search_recent') || [];
      
      // 移除重复的关键词（如果已存在）
      recentSearches = recentSearches.filter(item => item !== keyword);
      
      // 将新关键词添加到数组最前面（最新的在最前面）
      recentSearches.unshift(keyword);
      
      // 最多保留10条记录，超过10条时删除最早的一条（数组末尾的）
      // 因为新内容在最前面，所以保留前10条就是保留最新的10条
      if (recentSearches.length > 10) {
        recentSearches = recentSearches.slice(0, 10);
      }
      
      // 保存到缓存
      wx.setStorageSync('global_search_recent', recentSearches);
      
      // 更新页面数据
      this.setData({
        recentSearches: recentSearches
      });
    } catch (e) {
      console.error('保存搜索记录失败:', e);
    }
  },

  // 点击最近搜索项
  onRecentSearchTap(e) {
    const keyword = e.currentTarget.dataset.keyword;
    if (keyword) {
      this.setData({
        searchKeyword: keyword
      });
      this.performSearch(keyword);
    }
  },

  // 清除最近搜索记录
  onClearRecentSearches() {
    wx.showModal({
      title: '提示',
      content: '确定要清除所有最近搜索记录吗？',
      success: (res) => {
        if (res.confirm) {
          try {
            wx.removeStorageSync('global_search_recent');
            this.setData({
              recentSearches: []
            });
            wx.showToast({
              title: '已清除',
              icon: 'success'
            });
          } catch (e) {
            console.error('清除搜索记录失败:', e);
          }
        }
      }
    });
  },
});
